package com.sec03

/**
  * 9.3 包对象
  * 包可以包含类、对象、特质，但是不能包含函数和变量的定义，这个是 Java 虚拟机的限制。
  * 为了解决这个问题，每个包都有一个包对象。可以在包对象中定义这些 函数和常量等。
  * package object people就是package people的包对象，所以下面的应用上面包对象定义的defaultName
  * 即可以把变量等定义在包对象里面，然后在类里面直接去应用它
  */
// 定义在父包
package object people {
  val defaultName = "John Q. Public"
}

package people{
  class Person {
    var name = defaultName // A constant from the package
    def description = "A person with name " + name
  }
}
//  * package object people就是package people的包对象，所以下面的应用上面包对象定义的defaultName
//  * 即可以把变量等定义在包对象里面，然后在类里面直接去应用它
object Sec03Main extends App {
  val john = new com.sec03.people.Person
  println(john.description)
}
